{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Long Short-Term Memory Networks for Remaining Useful Life Estimation\n",
    "\n",
    "Survival Analysis comprises of statistical approaches to analyze time to the underlying event of interest. The analysis may also be referred as reliability analysis. Here, we develop this package to understand the time series data of turbofan engines degradation simulations. The time series data contains hidden information that provides clues to the time to failure, also known as remaining useful life (RUL). Accurate estimation of RUL plays a critical role in health management of turbofan engines. This package preprocess and analyzes the data and develop a machine learning model to capture the hidden information such as interactions between multiple sensors measurements and degradation patterns. In this package, we propose Long Short-Term Memory (LSTM) approach for RUL estimation. LSTM models are based on neural network with cyclic connections that makes them powerful in modeling sequences and forecast the degradation patterns. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Table of Content\n",
    "\n",
    "  * [Data Description](#Data-Description)\n",
    "  * [Import Data](#Import-Data)\n",
    "  * [Data Analysis](#Data-Analysis)\n",
    "  * [Model Development](#Model-Development)\n",
    "  * [Model Evaluation](#Model-Evaluation)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Data Description\n",
    "\n",
    "NASA C-MAPSS (Commercial Modular Aero-Propulsion System Simulation) data set (Turbofan Engine Degradation Simulation Data Set) is a widely used benchmark data. C-MAPSS data includes sensor data with different number of operating conditions and fault conditions [1].\n",
    "\n",
    "|      Data Set        |  FD001 | FD002 | FD003 | FD004|\n",
    "|----------------------|--------|-------|-------|------|\n",
    "|  Train Trajectories  |  100   |  260  |  100  | 249  |\n",
    "|   Test Trajectories  |  100   |  259  |  100  |  248 |\n",
    "| Operating Conditions |    1   |   6   |   1   |   6  |\n",
    "|    Fault Conditions  |    1   |   1   |   2   |   2  |\n",
    "\n",
    "The data has 4 sub-data sets with different number of operating conditions and fault conditions and each sub-data set is further divided into training and test subsets, as shown in table above. We use dataset FD002 for our purpose. Each row in the data is a snapshot of data taken during a single operating time cycle, which includes 26 columns: \n",
    " * 1st column represents engine ID, \n",
    " * 2nd column represents the current operational cycle number, \n",
    " * 3-5 columns are the three operational settings that have a substantial effect on engine performance, \n",
    " * 6-26 columns represent the 21 sensor values. More information about the 21 sensors can be found in [2]. \n",
    "\n",
    "The engine is operating normally at the start of each time series, and develops a fault at some point in time which is unknown. In the training set, the fault grows in magnitude until a system failure. In the test set, data is provided up to some time prior to system failure. The goal is to estimate the number of remaining operational cycles before failure on the test data. In this package we use only FD002 dataset for demonstrating capabilities of LSTM to estimate remaining useful life.\n",
    "\n",
    "[1] S. Zheng, K. Ristovski, A. Farahat and C. Gupta, \"Long Short-Term Memory Network for Remaining Useful Life estimation,\" 2017 IEEE International Conference on Prognostics and Health Management (ICPHM), Dallas, TX, 2017, pp. 88-95.\n",
    "\n",
    "[2] E. Ramasso and A. Saxena, “Performance benchmarking and analysis of prognostic methods for cmapss datasets.” International Journal of Prognostics and Health Management, vol. 5, no. 2, pp. 1–15, 2014."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Import Data\n",
    "\n",
    "'Turbofan Engine Degradation Simulation Data Set' can be downloaded from here: \n",
    "https://ti.arc.nasa.gov/tech/dash/pcoe/prognostic-data-repository/"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[Info] Training Data Loading...\n",
      "[Info] Testing Data Loading...\n",
      "[Info] Loading records of RUL on this testing data...\n"
     ]
    }
   ],
   "source": [
    "# Import C-MAPSS Dataset FD002 train and test and records of RUL\n",
    "from SAP.data_import import get_C_MAPSS_Data\n",
    "data_training_FD2, data_testing_FD2, data_testing_RUL_FD2 = get_C_MAPSS_Data(path = 'Data', dataset = 'FD002')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Data Analysis\n",
    "Here we analyze information in the data. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>engine_id</th>\n",
       "      <th>cycle</th>\n",
       "      <th>setting1</th>\n",
       "      <th>setting2</th>\n",
       "      <th>setting3</th>\n",
       "      <th>s1</th>\n",
       "      <th>s2</th>\n",
       "      <th>s3</th>\n",
       "      <th>s4</th>\n",
       "      <th>s5</th>\n",
       "      <th>...</th>\n",
       "      <th>s12</th>\n",
       "      <th>s13</th>\n",
       "      <th>s14</th>\n",
       "      <th>s15</th>\n",
       "      <th>s16</th>\n",
       "      <th>s17</th>\n",
       "      <th>s18</th>\n",
       "      <th>s19</th>\n",
       "      <th>s20</th>\n",
       "      <th>s21</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>34.9983</td>\n",
       "      <td>0.8400</td>\n",
       "      <td>100.0</td>\n",
       "      <td>449.44</td>\n",
       "      <td>555.32</td>\n",
       "      <td>1358.61</td>\n",
       "      <td>1137.23</td>\n",
       "      <td>5.48</td>\n",
       "      <td>...</td>\n",
       "      <td>183.06</td>\n",
       "      <td>2387.72</td>\n",
       "      <td>8048.56</td>\n",
       "      <td>9.3461</td>\n",
       "      <td>0.02</td>\n",
       "      <td>334</td>\n",
       "      <td>2223</td>\n",
       "      <td>100.00</td>\n",
       "      <td>14.73</td>\n",
       "      <td>8.8071</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>41.9982</td>\n",
       "      <td>0.8408</td>\n",
       "      <td>100.0</td>\n",
       "      <td>445.00</td>\n",
       "      <td>549.90</td>\n",
       "      <td>1353.22</td>\n",
       "      <td>1125.78</td>\n",
       "      <td>3.91</td>\n",
       "      <td>...</td>\n",
       "      <td>130.42</td>\n",
       "      <td>2387.66</td>\n",
       "      <td>8072.30</td>\n",
       "      <td>9.3774</td>\n",
       "      <td>0.02</td>\n",
       "      <td>330</td>\n",
       "      <td>2212</td>\n",
       "      <td>100.00</td>\n",
       "      <td>10.41</td>\n",
       "      <td>6.2665</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>24.9988</td>\n",
       "      <td>0.6218</td>\n",
       "      <td>60.0</td>\n",
       "      <td>462.54</td>\n",
       "      <td>537.31</td>\n",
       "      <td>1256.76</td>\n",
       "      <td>1047.45</td>\n",
       "      <td>7.05</td>\n",
       "      <td>...</td>\n",
       "      <td>164.22</td>\n",
       "      <td>2028.03</td>\n",
       "      <td>7864.87</td>\n",
       "      <td>10.8941</td>\n",
       "      <td>0.02</td>\n",
       "      <td>309</td>\n",
       "      <td>1915</td>\n",
       "      <td>84.93</td>\n",
       "      <td>14.08</td>\n",
       "      <td>8.6723</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>4</td>\n",
       "      <td>42.0077</td>\n",
       "      <td>0.8416</td>\n",
       "      <td>100.0</td>\n",
       "      <td>445.00</td>\n",
       "      <td>549.51</td>\n",
       "      <td>1354.03</td>\n",
       "      <td>1126.38</td>\n",
       "      <td>3.91</td>\n",
       "      <td>...</td>\n",
       "      <td>130.72</td>\n",
       "      <td>2387.61</td>\n",
       "      <td>8068.66</td>\n",
       "      <td>9.3528</td>\n",
       "      <td>0.02</td>\n",
       "      <td>329</td>\n",
       "      <td>2212</td>\n",
       "      <td>100.00</td>\n",
       "      <td>10.59</td>\n",
       "      <td>6.4701</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "      <td>25.0005</td>\n",
       "      <td>0.6203</td>\n",
       "      <td>60.0</td>\n",
       "      <td>462.54</td>\n",
       "      <td>537.07</td>\n",
       "      <td>1257.71</td>\n",
       "      <td>1047.93</td>\n",
       "      <td>7.05</td>\n",
       "      <td>...</td>\n",
       "      <td>164.31</td>\n",
       "      <td>2028.00</td>\n",
       "      <td>7861.23</td>\n",
       "      <td>10.8963</td>\n",
       "      <td>0.02</td>\n",
       "      <td>309</td>\n",
       "      <td>1915</td>\n",
       "      <td>84.93</td>\n",
       "      <td>14.13</td>\n",
       "      <td>8.5286</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 26 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   engine_id  cycle  setting1  setting2  setting3      s1      s2       s3  \\\n",
       "0          1      1   34.9983    0.8400     100.0  449.44  555.32  1358.61   \n",
       "1          1      2   41.9982    0.8408     100.0  445.00  549.90  1353.22   \n",
       "2          1      3   24.9988    0.6218      60.0  462.54  537.31  1256.76   \n",
       "3          1      4   42.0077    0.8416     100.0  445.00  549.51  1354.03   \n",
       "4          1      5   25.0005    0.6203      60.0  462.54  537.07  1257.71   \n",
       "\n",
       "        s4    s5   ...       s12      s13      s14      s15   s16  s17   s18  \\\n",
       "0  1137.23  5.48   ...    183.06  2387.72  8048.56   9.3461  0.02  334  2223   \n",
       "1  1125.78  3.91   ...    130.42  2387.66  8072.30   9.3774  0.02  330  2212   \n",
       "2  1047.45  7.05   ...    164.22  2028.03  7864.87  10.8941  0.02  309  1915   \n",
       "3  1126.38  3.91   ...    130.72  2387.61  8068.66   9.3528  0.02  329  2212   \n",
       "4  1047.93  7.05   ...    164.31  2028.00  7861.23  10.8963  0.02  309  1915   \n",
       "\n",
       "      s19    s20     s21  \n",
       "0  100.00  14.73  8.8071  \n",
       "1  100.00  10.41  6.2665  \n",
       "2   84.93  14.08  8.6723  \n",
       "3  100.00  10.59  6.4701  \n",
       "4   84.93  14.13  8.5286  \n",
       "\n",
       "[5 rows x 26 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_training_FD2.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Training data contains engine_id as engine number and snapshot of different variables are given at cycles. The degradation of that engine grows with cycle. The training data contains the failure of engine at the last cycle that provides us the information of engine remaining useful life (RUL) at earliear cycles. Here we plot the histogram of RUL from all engines."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x106bc1610>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Average time-to-failure from the first cycle is: 206.34\n"
     ]
    }
   ],
   "source": [
    "# plot the RUL histogram of units\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "plt.figure(figsize=(10,3))\n",
    "plt.subplot(1,2,1)\n",
    "RULtraining = []\n",
    "for unit in range(1,data_training_FD2['engine_id'].unique().shape[0]):\n",
    "    RULtraining.append(data_training_FD2[data_training_FD2['engine_id'] == unit]['cycle'].max())\n",
    "plt.hist(RULtraining)\n",
    "plt.title('Histogram of cycle number at failure')\n",
    "\n",
    "plt.subplot(1,2,2)\n",
    "plt.boxplot(RULtraining)\n",
    "plt.title('Distribution of cycle number at failure')\n",
    "plt.ylabel('RUL')\n",
    "plt.show()\n",
    "\n",
    "print 'Average time-to-failure from the first cycle is: %.2f' %np.mean(RULtraining)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(minimum, maximum) values of RUL are observed as (128,378). The majority of engine fails near 200 cycles. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Model Development\n",
    "This section consists of modeling data preparation, network architecture and model development with training data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[Info] Generating a column 'time_of_event' using maximum cycle number...\n",
      "[Info] Generating 'time_to_event' value for each engine at given cycle...\n",
      "[Info] Centering the settings and sensors measurements...\n",
      "[Info] Box plot of column variables:\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x106b23610>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[Info] Normalizing the remaining useful life at given cycle...\n",
      "[Info] Preparing the input and output label data for model training...\n",
      "[Info] Plot of model training error:\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a22073a90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from SAP.model import LSTM_for_RUL\n",
    "%matplotlib inline\n",
    "\n",
    "# Build model\n",
    "(data_training,\n",
    " Xtraining, \n",
    " Ytraining, \n",
    " model,\n",
    " settings_min_max_mean,\n",
    " sensors_min_max_mean,\n",
    " time_of_event_max,\n",
    " centering,\n",
    " normalization,\n",
    " dt) = LSTM_for_RUL(X=data_training_FD2,\n",
    "                centering = True,\n",
    "                normalization = True,\n",
    "                dt = 10, # dt = 10,20,30,40 are available\n",
    "                load_XYtraining_data = False,\n",
    "                model_parameters = {'LSTM':[32,64],'FFNN':[8,8,1],'epoch':1,'batch_size':32,'verbose':1},\n",
    "                import_trained_model = True,\n",
    "                plot_training_history = True\n",
    "                                 )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>engine_id</th>\n",
       "      <th>cycle</th>\n",
       "      <th>setting1</th>\n",
       "      <th>setting2</th>\n",
       "      <th>setting3</th>\n",
       "      <th>s1</th>\n",
       "      <th>s2</th>\n",
       "      <th>s3</th>\n",
       "      <th>s4</th>\n",
       "      <th>s5</th>\n",
       "      <th>...</th>\n",
       "      <th>s14</th>\n",
       "      <th>s15</th>\n",
       "      <th>s16</th>\n",
       "      <th>s17</th>\n",
       "      <th>s18</th>\n",
       "      <th>s19</th>\n",
       "      <th>s20</th>\n",
       "      <th>s21</th>\n",
       "      <th>time_of_event</th>\n",
       "      <th>time_to_event</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.261852</td>\n",
       "      <td>0.318223</td>\n",
       "      <td>0.148849</td>\n",
       "      <td>-0.318586</td>\n",
       "      <td>-0.223437</td>\n",
       "      <td>-0.166222</td>\n",
       "      <td>-0.164184</td>\n",
       "      <td>-0.238281</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.042933</td>\n",
       "      <td>0.006022</td>\n",
       "      <td>-0.332595</td>\n",
       "      <td>-0.149057</td>\n",
       "      <td>-0.012276</td>\n",
       "      <td>0.148849</td>\n",
       "      <td>-0.207795</td>\n",
       "      <td>-0.208556</td>\n",
       "      <td>149.0</td>\n",
       "      <td>0.391534</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>0.428485</td>\n",
       "      <td>0.319173</td>\n",
       "      <td>0.148849</td>\n",
       "      <td>-0.378854</td>\n",
       "      <td>-0.273166</td>\n",
       "      <td>-0.180824</td>\n",
       "      <td>-0.191744</td>\n",
       "      <td>-0.384873</td>\n",
       "      <td>...</td>\n",
       "      <td>0.013572</td>\n",
       "      <td>0.017482</td>\n",
       "      <td>-0.332595</td>\n",
       "      <td>-0.190724</td>\n",
       "      <td>-0.035531</td>\n",
       "      <td>0.148849</td>\n",
       "      <td>-0.355943</td>\n",
       "      <td>-0.353075</td>\n",
       "      <td>149.0</td>\n",
       "      <td>0.388889</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>0.023814</td>\n",
       "      <td>0.059078</td>\n",
       "      <td>-0.851151</td>\n",
       "      <td>-0.140766</td>\n",
       "      <td>-0.388682</td>\n",
       "      <td>-0.442127</td>\n",
       "      <td>-0.380282</td>\n",
       "      <td>-0.091689</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.480144</td>\n",
       "      <td>0.572806</td>\n",
       "      <td>-0.332595</td>\n",
       "      <td>-0.409474</td>\n",
       "      <td>-0.663438</td>\n",
       "      <td>-0.851151</td>\n",
       "      <td>-0.230086</td>\n",
       "      <td>-0.216224</td>\n",
       "      <td>149.0</td>\n",
       "      <td>0.386243</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>4</td>\n",
       "      <td>0.428711</td>\n",
       "      <td>0.320123</td>\n",
       "      <td>0.148849</td>\n",
       "      <td>-0.378854</td>\n",
       "      <td>-0.276745</td>\n",
       "      <td>-0.178629</td>\n",
       "      <td>-0.190300</td>\n",
       "      <td>-0.384873</td>\n",
       "      <td>...</td>\n",
       "      <td>0.004909</td>\n",
       "      <td>0.008475</td>\n",
       "      <td>-0.332595</td>\n",
       "      <td>-0.201141</td>\n",
       "      <td>-0.035531</td>\n",
       "      <td>0.148849</td>\n",
       "      <td>-0.349770</td>\n",
       "      <td>-0.341494</td>\n",
       "      <td>149.0</td>\n",
       "      <td>0.383598</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "      <td>0.023855</td>\n",
       "      <td>0.057296</td>\n",
       "      <td>-0.851151</td>\n",
       "      <td>-0.140766</td>\n",
       "      <td>-0.390884</td>\n",
       "      <td>-0.439553</td>\n",
       "      <td>-0.379127</td>\n",
       "      <td>-0.091689</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.488808</td>\n",
       "      <td>0.573611</td>\n",
       "      <td>-0.332595</td>\n",
       "      <td>-0.409474</td>\n",
       "      <td>-0.663438</td>\n",
       "      <td>-0.851151</td>\n",
       "      <td>-0.228371</td>\n",
       "      <td>-0.224398</td>\n",
       "      <td>149.0</td>\n",
       "      <td>0.380952</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 28 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   engine_id  cycle  setting1  setting2  setting3        s1        s2  \\\n",
       "0          1      1  0.261852  0.318223  0.148849 -0.318586 -0.223437   \n",
       "1          1      2  0.428485  0.319173  0.148849 -0.378854 -0.273166   \n",
       "2          1      3  0.023814  0.059078 -0.851151 -0.140766 -0.388682   \n",
       "3          1      4  0.428711  0.320123  0.148849 -0.378854 -0.276745   \n",
       "4          1      5  0.023855  0.057296 -0.851151 -0.140766 -0.390884   \n",
       "\n",
       "         s3        s4        s5      ...             s14       s15       s16  \\\n",
       "0 -0.166222 -0.164184 -0.238281      ...       -0.042933  0.006022 -0.332595   \n",
       "1 -0.180824 -0.191744 -0.384873      ...        0.013572  0.017482 -0.332595   \n",
       "2 -0.442127 -0.380282 -0.091689      ...       -0.480144  0.572806 -0.332595   \n",
       "3 -0.178629 -0.190300 -0.384873      ...        0.004909  0.008475 -0.332595   \n",
       "4 -0.439553 -0.379127 -0.091689      ...       -0.488808  0.573611 -0.332595   \n",
       "\n",
       "        s17       s18       s19       s20       s21  time_of_event  \\\n",
       "0 -0.149057 -0.012276  0.148849 -0.207795 -0.208556          149.0   \n",
       "1 -0.190724 -0.035531  0.148849 -0.355943 -0.353075          149.0   \n",
       "2 -0.409474 -0.663438 -0.851151 -0.230086 -0.216224          149.0   \n",
       "3 -0.201141 -0.035531  0.148849 -0.349770 -0.341494          149.0   \n",
       "4 -0.409474 -0.663438 -0.851151 -0.228371 -0.224398          149.0   \n",
       "\n",
       "   time_to_event  \n",
       "0       0.391534  \n",
       "1       0.388889  \n",
       "2       0.386243  \n",
       "3       0.383598  \n",
       "4       0.380952  \n",
       "\n",
       "[5 rows x 28 columns]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_training.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "lstm_1 (LSTM)                (None, 10, 32)            7296      \n",
      "_________________________________________________________________\n",
      "lstm_2 (LSTM)                (None, 64)                24832     \n",
      "_________________________________________________________________\n",
      "dense_1 (Dense)              (None, 8)                 520       \n",
      "_________________________________________________________________\n",
      "dense_2 (Dense)              (None, 8)                 72        \n",
      "_________________________________________________________________\n",
      "dense_3 (Dense)              (None, 1)                 9         \n",
      "=================================================================\n",
      "Total params: 32,729\n",
      "Trainable params: 32,729\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "model.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Model Evaluation"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Model Evaluation on Training Data\n",
    "This section evaluate the model on the training data. First training data is formatted in the form of test data and then it is tested with the trained model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "from SAP.model import training_data_to_testing\n",
    "(Xtraining_to_testing, \n",
    " Ytraining_to_testing, \n",
    " engines_training_to_testing) = training_data_to_testing(data_testing = data_training,\n",
    "                                                         dt = dt, load_training_to_testing_data = False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here we select engines id that we want to test. We also perform inverse operation (if applicable) on the normalized or standarized data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[Info] collecting RUL predictions on test data for specified engines...\n"
     ]
    }
   ],
   "source": [
    "# Evaluate model output against given RUL\n",
    "from SAP.model import Evaluate_Model\n",
    "(prediction,\n",
    " real,\n",
    " engines_to_check) = Evaluate_Model(Xtraining_to_testing, \n",
    "                        Ytraining_to_testing,\n",
    "                        engines_training_to_testing,\n",
    "                        model, \n",
    "                        False, \n",
    "                        engines_to_check = [1,2,3,4,5])\n",
    "\n",
    "# Convert RUL to original scale if normalization is done before\n",
    "from SAP.model import iNormalization\n",
    "(prediction,\n",
    "real) = iNormalization(prediction,\n",
    "                       real,\n",
    "                       normalization = normalization,\n",
    "                       time_of_event_max = time_of_event_max)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The following function outputs the plot of remaining useful life over a period of time for specified engine id."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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GjZsSL58+fD09GTAgAEMGzaMIUOG4OHhQb58+fj4448dMtbOJPUeJKVSpUo89NBDNGzYkFq1atGoUaMk9/38888ZOnQokyZNIjw8nIcffhhPT89UvgsZY5L7s0B28fHxka1bt+b0MHKthEFt/GVIHBQHBAQwbty42ClVBg0apOUbSimlctS+ffuoW7duTg8j2125coUiRYoQERFBjx49GDhwID169MjpYeUZzr7vjDF/iIhPao7XjPJNwFnWObk6aCDZroPOyjcSzv+sWWellFIq4yZMmMC6desIDQ2lY8eO3H///Tk9JJUGGijfArR8QymllMqdpk2bltNDUBmggfItSmffUEoppZTKGA2U84icKN8ADZyVUkopdfPSQFkBmV++kdq6Zy3fUEoppVRupYGySlJGyjcg5bpnLd9QSimlVG6mgbJKtbSUb0DKdc9avqGUUio7nD9/nnbt2gHw77//4urqSunSpQH47bffYhM8GbVt2zbOnDnDPffcA8CKFSs4fPgwo0ePzpTzxzh69Ci//fYbDz/8cJqO27t3L3369MHFxYUVK1ZQtWpVp/t16tSJpUuX4u7uTqlSpbh48WImjPrmpIGyyjRprXvW8g2llFLZ4fbbb4/tfDdhwgSKFCnC888/77CPiCAiuLikv2nxtm3b2LNnT2ygnFXzJR89epQlS5akOVBevnw5Dz74IOPGjUt2vzVr1gAQERGR5rFFRESQL9+tE17eOneicp2U6p61fEMppVROOnz4MPfffz+tWrViy5YtrFy5Ek9Pz9gM6pIlS1i3bh3z5s3j9OnTDB06lOPHj+Pi4sL777/v0H3u+vXrvP7661y/fp2AgABeeeUVLl68yJ49e5g+fTp9+/alWLFi7N27l+PHj7Nw4ULmz5/Pli1baNmyJfPnzwfghx9+4PXXX+fGjRvUqlWLBQsWULhwYYdxjxkzhkOHDuHl5cXAgQMZNGgQQ4YMYdu2beTPn5/p06fTpk0bh2NWrVrFhx9+iKurK7/88gvr1q2ja9eunDp1itDQUJ555hmeeOIJACpWrMiePXsoUqRI7PHr1q3jww8/jO1MOGTIEFq1akXfvn2pWLEiTz75JD/++COjRo3Cy8uLESNGcO7cOQoXLsy8efMSdQO8WWigrLKVlm8opZQaNQqiE7yZxssLpk9P+3F79+5l4cKFzJo1K9kM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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a1eabee10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from SAP.utils import plot_RUL\n",
    "plot_RUL(engine = 5, X = data_training_FD2, engines_to_check = engines_to_check,\n",
    "         prediction = prediction, real = real, RULtraining = RULtraining, dt = dt)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The above plot shows the remaining useful life prediction (red) along with real time-to-failure (blue) and average time-to-failure (black). Average time-to-failure is calculated using all the engine ids in training data. Plot shows that the model is able to predict well at a given cycle."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### RUL prediction in Test Data\n",
    "Next, the model is evaluated against the test data. First, test data is prepared using the remaining useful life provided for every test engine id. Few more information is used to format the test data to input to the model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[Info] Centering the input test data...\n",
      "[Info] Normalizing the remaining useful life of test data...\n",
      "[Info] Assimilating test data for every engine...\n"
     ]
    }
   ],
   "source": [
    "from SAP.model import Prepare_TestData\n",
    "\n",
    "# Prepare test data \n",
    "(Xtesting, \n",
    " Ytesting,\n",
    " engines,\n",
    " all_in_one) = Prepare_TestData(X = data_testing_FD2, \n",
    "                               testing_RUL = data_testing_RUL_FD2,\n",
    "                               settings_min_max_mean = settings_min_max_mean,\n",
    "                               sensors_min_max_mean = sensors_min_max_mean,\n",
    "                               time_of_event_max = time_of_event_max,\n",
    "                               centering = centering,\n",
    "                               normalization = normalization,\n",
    "                               dt = dt,\n",
    "                               all_in_one = False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[  1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18\n",
      "  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36\n",
      "  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54\n",
      "  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72\n",
      "  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90\n",
      "  91  92  93  94  95  96  97  98  99 100 101 102 103 104 105 106 107 108\n",
      " 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126\n",
      " 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144\n",
      " 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162\n",
      " 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180\n",
      " 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198\n",
      " 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216\n",
      " 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234\n",
      " 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252\n",
      " 253 254 255 256 257 258 259]\n"
     ]
    }
   ],
   "source": [
    "# These engines can be tested with trained model for remaining useful life\n",
    "print engines "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Model is evaluated for specified engine ids. Inverse operation (if applicable) of normalization or standardization is also performed at this stage."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[Info] collecting RUL predictions on test data for specified engines...\n"
     ]
    }
   ],
   "source": [
    "# Evaluate model output against given RUL\n",
    "from SAP.model import Evaluate_Model\n",
    "(prediction,\n",
    " real,\n",
    " engines_to_check) = Evaluate_Model(Xtesting, \n",
    "                        Ytesting,\n",
    "                        engines,\n",
    "                        model, \n",
    "                        all_in_one, \n",
    "                        engines_to_check = [1,2,3,4,5,6,7,24,121])\n",
    "\n",
    "# Convert RUL to original scale if normalization is done before\n",
    "from SAP.model import iNormalization\n",
    "(prediction,\n",
    "real) = iNormalization(prediction,\n",
    "                       real,\n",
    "                       normalization = normalization,\n",
    "                       time_of_event_max = time_of_event_max)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a2f974d90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_RUL(engine = 1, X = data_testing_FD2, engines_to_check = engines_to_check,\n",
    "         prediction = prediction, real = real, RULtraining = RULtraining, dt = dt)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "The above plot shows the remaining useful life prediction (red), real time-to-failure (blue) and average time-to-failure (black). The predicted curve follows the average time-to-failure in the begining of cycle and then follows the true time-to-failure curve as it approaches the time of event. The erratic nature of the predictions suggests for model improvement or testing different configuration of the model. User of this package can be easily perform this task in the model development section and evaluate the model."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
